package org.jim.core.helper.cs;

import org.jim.core.ImConst;
import org.jim.core.packets.cs.session.vo.*;
import org.jim.core.utils.KeyUtil;

import java.util.List;

/**
 * @FileName:
 * @Description:
 * @Author linjie
 * @Date 2020/7/293:39 PM
 * @Version 4.0.0
 */
public interface ICsSessionHelper {
    /**
     * 检查session
     *
     * @return
     */
    JimCsCreateSessionResp check(JimCsCheckSessionReq jimCheckSessionReq);

    /**
     * 创建session
     *
     * @return
     */
    JimCsCreateSessionResp create(JimCsCreateSessionReq req);


    JimCsSession get(String sessionId);

    /**
     * 客服结束会话
     *
     * @return
     */
    Boolean csEnd(String csId, String sessionId);


    /**
     * 客服删除结束会话(所有当前客服的会话)
     *
     * @return
     */
    Boolean csDelEnd(String csId);


    /**
     * 用户删除会话
     * 删除缓存,后台会话结束
     *
     * @return
     */
    Boolean userDel(String userId, String sessionId);


    /**
     * 获取session config
     *
     * @return
     */
    JimCsSessionConfigResp getConfig(String tenantId);

    /**
     * 查询会话列表
     *
     * @return
     */
    List<JimCsGetSessionResp> getList(JimCsGetSessionReq jimGetSessionReq);


    /**
     * operateType 1.用户刷新会话 2.客服刷新会话
     * 1.更新会话时间 2.更新最后一条消息内容 3.更新未读消息数量 4.更新用户或者客服发消息时间
     *
     * @param sessionId   会话Id
     * @param refreshTime 刷新时间
     * @param lastMsg     最后一条消息
     */
    void refresh(String sessionId, Long refreshTime, String lastMsg, Integer operateType);

    /**
     * readAll
     * from读取sessionId的消息,from 可用于校验
     */
    void readAll(String from, String sessionId, Integer operateType);


    default String getKey(String sessionId) {
        return KeyUtil.formatKey(ImConst.SESSION_KEY.KEY, "sessionId", sessionId);
    }


    /**
     * 会话分页列表的key
     *
     * @param roleType
     * @param userId
     * @return
     */
    default String getPageKey(String roleType, String userId) {
        return KeyUtil.formatKey(ImConst.SESSION_KEY.PAGE_KEY, "roleType", roleType, "userId", userId);
    }


}
